home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / comm / comm5 / nwsbrkr5.lha / Reader / NewsBreaker / src / app / Actioncode.c next >
C/C++ Source or Header  |  1996-12-22  |  7KB  |  284 lines

  1. /* actioncode-System. Mehr dazu im Text weiter unten  */
  2.  
  3.  
  4. enum
  5.   {
  6.     NO_ACTION,            /* actioncode = 0. Kein Befehl */
  7.     ACTIVATE_TAB_GADGET,
  8.     DISPLAY_NEXT_MESSAGE,
  9.     DISPLAY_PREV_MESSAGE,
  10.     DISPLAY_SELECTED_MESSAGE,    /* GetNewMsg() */
  11.     SCROLL_DOWN_TEXTFIELD,
  12.     SCROLL_UP_TEXTFIELD,
  13.     QUIT_NEWSBREAKER,
  14.     QUIT_NEWSBREAKER_SAFELY,    /* mit Abfrage vor Quit/Logout */
  15.     REFRESH_WINDOW,
  16.     GET_NEW_GROUP,
  17.     OPEN_AMIGAGUIDE,
  18.     OPEN_ABOUT,
  19.     DISPLAY_HELP,
  20.     DISPLAY_BUGS,
  21.     DISPLAY_BUGREPORT,
  22.     DISPLAY_ORDERFORM,
  23.     DISPLAY_FEATUREWISH,
  24.     CUT_TEXTFIELD,
  25.     COPY_TEXTFIELD,
  26.     COPYALL_TEXTFIELD,
  27.     PASTE_TEXTFIELD,
  28.     UNDO_TEXTFIELD,
  29.     ERASE_TEXTFIELD,
  30.     WRITE_REPLY_MESSAGE,
  31.     WRITE_FOLLOWUP_MESSAGE,
  32.     WRITE_EMAIL_MESSAGE,
  33.     WRITE_POSTING_MESSAGE,
  34.     GET_MAIL_GROUP,
  35.     SET_FOCUS_ALL_MSG,
  36.     SET_FOCUS_NEW_MSG,
  37.     SET_FOCUS_LAST25_MSG,    /* fehlerhaft supported: gruppe < 25 msg --> 0 msg in liste! */
  38.     DEBUG_SHOWUMSFIELD,
  39.     DEBUG_SHOWGLOBALS,
  40.     CATCHUP_CURRENT_GROUP,
  41.     DELETE_MESSAGE_SAFELY,    /* lösche aktuelle Message, mit Sicherheitsabfrage */
  42.     DELETE_MESSAGE,        /* lösche aktuelle Message, ohne Abfrage */
  43.     SAVE_MESSAGE,
  44.     PRINT_MESSAGE,
  45.   };
  46.  
  47. /* Globale Variable */
  48. ULONG actioncode = NO_ACTION;
  49. ULONG lasterror = NO_ACTION;    /* für spezielle Fehlerbehandlung */
  50.  
  51. /* Macro */
  52. #define SETACTION(ac) actioncode = ac
  53.  
  54. /*
  55.    ----------------------------------------------------
  56.    Action Codes
  57.    ----------------------------------------------------
  58.  
  59.    IDCMP Ereignisse systematisch auswerten. Ein kurzer Überblick.
  60.  
  61.  
  62.    A. Beschreibung
  63.    B. Implementation
  64.    C. Ausblick
  65.    -----------------
  66.  
  67.    A.
  68.  
  69.    Jeder Actioncode ist mit einer NewsBreaker-Funktion verbunden.
  70.    Z.B.
  71.    PRINT_MESSAGE      --------> PrintUMSMessage()
  72.  
  73.    -- Userinput wird geholt
  74.    -- Userinput wird ausgewertet
  75.    -- ein Actioncode wird dem Userinput zugeordnet
  76.    -- zum Actioncode passende Funktion wird gestartet
  77.  
  78.  
  79.    B.
  80.  
  81.    Vorteile:
  82.    1. spart Code und damit Programmieraufwand
  83.    2. ist wiederverwertbar in anderen Projekten
  84.    3. ist flexibel erweiterbar um neue Routinen und Actioncodes
  85.    4. der Code ist unabhängig von den Eingabeverfahren. Ob Gadget,
  86.    Menü, Maus, Tastatur. Pro Eingabemethode gibt es ein
  87.    Auswerteverfahren in wenigen Codezeilen. Später wird es
  88.    evtl. eine Ereignistabelle geben. (todo)
  89.  
  90.    - Im Menuitem steht "actioncode" in UserData
  91.    - in der Gadget-Struktur ist "actioncode" in UserData
  92.    - bei der Tastaturauswertung ist es noch switch/case-Konstrukt,
  93.    hier wäre eine Ereignistabelle nützlich.
  94.  
  95.    C. Ausblick
  96.  
  97.    Zukünftige/Geplante Erweiterungen des Actioncode-Systems:
  98.  
  99.    - Ereignistabellen.
  100.    - Dynamische, konfigurierbare Ereignisse während Laufzeit.
  101.    - Parameterübergabe ist unabhängig von konkreten Funktionsparametern.
  102.    -- z.B. als Tagliste
  103.    -- z.B. über DOS/ReadArgs()
  104.  
  105. später: (todo) Zeiger auf erweiterte Actioncode-Struktur, als Input für
  106. typenfreie(?) Parameterübergabe im ReadArgs Template:
  107.  
  108. AUFRUFER
  109. ========
  110.  
  111. ActionCode
  112. {
  113. ULONG    ac_acode ;    -- Nummer der auszuführenden Routine
  114. STRPTR   ac_arguments; -- ReadArgs() kompatible Argumente
  115.                           für das zu acode definierte Template.
  116.                           - Null, wenn default-Werte verwendet werden.
  117.                           --Null, wenn kein Template vorhanden.
  118. }
  119.  
  120. AUSWERTER
  121. =========
  122.  
  123.    Zu jedem actioncode ein STRPTR auf ein ReadArgs-Template:
  124.    z.B. bei
  125.    actioncode                STRPTR ReadArgs-Template
  126.    DELETE_MESSAGE_NR         "NUMMER/A"
  127.    DELETE_CURRENT_MESSAGE    NULL
  128.  
  129.    (Textende Actioncodes)
  130.  */
  131.  
  132. /* name/helpstr/guidenode sind auch default für Button- und Menuhilfe */
  133. /* todo : ActionCodeNode dokumentieren */
  134.  
  135. struct ActionCodeNode
  136.   {
  137.     struct Node ac_node;
  138.     /*-------------------------------------------------------*/
  139.     ULONG  ac_acode;        /* actioncode */
  140.     STRPTR ac_template;         /* ReadArgs() Schablone */
  141.     /*-------------------------------------------------------*/
  142.     STRPTR name;        /* Funktionsbezeichner (i.d.R. Titel für Onlinehilfefenster) */
  143.     STRPTR helpstr;        /* kurzer Online-Hilfstext */
  144.     STRPTR guidenode;        /* ausführliche Hilfe im Guide/guidenode */
  145.     STRPTR command;             /* ARexx Kommandoname */
  146.   };
  147.  
  148. /* VERALTET
  149. ActioncodeInfo[] =
  150. {
  151.   {
  152.     NO_ACTION, NULL, NULL, NULL, NULL, NULL
  153.   }
  154.   ,
  155.   {
  156.     ACTIVATE_TAB_GADGET, NULL, NULL, NULL, NULL, NULL
  157.   }
  158.   ,
  159.   {
  160.     DISPLAY_NEXT_MESSAGE, "Nächste Nachricht", NULL, NULL, NULL, NULL
  161.   }
  162.   ,
  163.   {
  164.     DISPLAY_PREV_MESSAGE, "Vorhergehende Nachricht", NULL, NULL, NULL, NULL
  165.   }
  166.   ,
  167.   {
  168.     DISPLAY_SELECTED_MESSAGE, "Ausgewählte Nachricht", NULL, NULL, NULL, NULL
  169.   }
  170.   ,
  171.   {
  172.     SCROLL_DOWN_TEXTFIELD, "Text nach unten", NULL, NULL, NULL, NULL
  173.   }
  174.   ,
  175.   {
  176.     SCROLL_UP_TEXTFIELD, "Text nach oben", NULL, NULL, NULL, NULL
  177.   }
  178.   ,
  179.   {
  180.     QUIT_NEWSBREAKER, "Sofort beenden", NULL, NULL, NULL, NULL
  181.   }
  182.   ,
  183.   {
  184.     QUIT_NEWSBREAKER_SAFELY, "Beenden", NULL, NULL, NULL, NULL
  185.   }
  186.   ,
  187.   {
  188.     REFRESH_WINDOW, "Oberfläche erneuern", NULL, NULL, NULL, NULL
  189.   }
  190.   ,
  191.   {
  192.     GET_NEW_GROUP, "Neue Gruppe", NULL, NULL, NULL, NULL
  193.   }
  194.   ,
  195.   {
  196.     OPEN_AMIGAGUIDE, "GUIDE öffnen", NULL, NULL, NULL, NULL
  197.   }
  198.   ,
  199.   {
  200.     CUT_TEXTFIELD, "Ausschneiden", NULL, NULL, NULL, NULL
  201.   }
  202.   ,
  203.   {
  204.     COPY_TEXTFIELD, "Kopieren", NULL, NULL, NULL, NULL
  205.   }
  206.   ,
  207.   {
  208.     COPYALL_TEXTFIELD, "Alles kopieren", NULL, NULL, NULL, NULL
  209.   }
  210.   ,
  211.   {
  212.     PASTE_TEXTFIELD, "Einfügen", NULL, NULL, NULL, NULL
  213.   }
  214.   ,
  215.   {
  216.     UNDO_TEXTFIELD, "Rückgängig machen", NULL, NULL, NULL, NULL
  217.   }
  218.   ,
  219.   {
  220.     ERASE_TEXTFIELD, "Löschen", NULL, NULL, NULL, NULL
  221.   }
  222.   ,
  223.   {
  224.     WRITE_REPLY_MESSAGE, "Reply", NULL, NULL, NULL, NULL
  225.   }
  226.   ,
  227.   {
  228.     WRITE_FOLLOWUP_MESSAGE, "Follow-Up", NULL, NULL, NULL, NULL
  229.   }
  230.   ,
  231.   {
  232.     WRITE_EMAIL_MESSAGE, "EMail", NULL, NULL, NULL, NULL
  233.   }
  234.   ,
  235.   {
  236.     WRITE_POSTING_MESSAGE, "Posting", NULL, NULL, NULL, NULL
  237.   }
  238.   ,
  239.   {
  240.     GET_MAIL_GROUP, "Hole Nachrichtenliste", NULL, NULL, NULL, NULL
  241.   }
  242.   ,
  243.   {
  244.     SET_FOCUS_ALL_MSG, "Alle Nachrichten", NULL, NULL, NULL, NULL
  245.   }
  246.   ,
  247.   {
  248.     SET_FOCUS_NEW_MSG, "Nur neue Nachrichten", NULL, NULL, NULL, NULL
  249.   }
  250.   ,
  251.   {
  252.     SET_FOCUS_LAST25_MSG, "Nur die 25 letzten", NULL, NULL, NULL, NULL
  253.   }
  254.   ,
  255.   {
  256.     DEBUG_SHOWUMSFIELD, "Zeige UMS-Felder", NULL, NULL, NULL, NULL
  257.   }
  258.   ,
  259.   {
  260.     DEBUG_SHOWGLOBALS, "Zeige Globale", NULL, NULL, NULL, NULL
  261.   }
  262.   ,
  263.   {
  264.     CATCHUP_CURRENT_GROUP, "Catch-Up", NULL, NULL, NULL, NULL
  265.   }
  266.   ,
  267.   {
  268.     DELETE_MESSAGE_SAFELY, "Nachricht löschen", NULL, NULL, NULL, NULL
  269.   }
  270.   ,
  271.   {
  272.     DELETE_MESSAGE, "Nachricht sofort löschen", NULL, NULL, NULL, NULL
  273.   }
  274.   ,
  275.   {
  276.     SAVE_MESSAGE, "Nachricht speichern", NULL, NULL, NULL, NULL
  277.   }
  278.   ,
  279.   {
  280.     PRINT_MESSAGE, "Nachricht drucken", NULL, NULL, NULL, NULL
  281.   }
  282.   ,
  283. };
  284. */